<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    /*this的4种方法
    *   1.函数调用 ，this就是window
    *   2.对象的方法调用 this就是对象
    *   3.构造函数调用时，this就是新new出来的对象
    *   4.使用call和apply调用时，this就是call()和apply() 第一参数
    *
    * */
    //举例1  函数调用时
    var name="蜘蛛侠"
    function fun1() {
    console.log(this.name);
    }
    fun1();
    //举例2 对象的方法 this就是对象
    var obj={
        name:"孙悟空",
        age:15,
        sayName:function () {
        console.log(this.name)//this就是obj
        }
    };
    obj.sayName();
    //举例3 构造函数调用 this就新创建的对象
    function Person(name,age) {
        this.name=name;//this就是指的是per
        this.age=age;
        console.log(this.name)//返回帽子  全等与console.log((per.name)
    }
    var per=new Person("帽子",5);
    console.log(per.name);//返回帽子
    //举例4  call 的第一个参数就是this
    var obj2={
        name:"二郎神",
        sayName:function () {
        console.log(this.name)//this就是call后面的第一个参数obj3
        }
    };
    var obj3={
        name:"三郎神",
        sayName:function () {
            console.log(this.name)//this默认就是obj3
        }
    };
    obj2.sayName.call(obj3); //返回三郎神
</script>
</body>
</html>